package com.young.dubbo.provider;


import com.young.dubbo.framework.Protocol;
import com.young.dubbo.framework.ProtocolFactory;
import com.young.dubbo.framework.URL;
import com.young.dubbo.provider.api.HelloService;
import com.young.dubbo.provider.impl.HelloServiceImpl;
import com.young.dubbo.register.RemoteMapRegister;
import com.young.dubbo.register.ZookeeperRegister;

/**
 * 注册中心服务的提供者，根据对应的协议，启动不同的注册中心，并接受对应服务注册
 */
public class Provider {
    private static boolean isRun = true;
    public static void main(String[] args) {
        // 提供远程调用的的接口和地址的封装
        URL url = new URL("localhost",9090);
        //注册服务
        // 本地注册
        LocalRegister.register(HelloService.class.getName(), HelloServiceImpl.class);
        // 远程注册，模拟远程注册，本质注册到map中，
        RemoteMapRegister.register(HelloService.class.getName(),url);
        // 已zookeeper 作为注册中心
        /*ZookeeperRegister.regist(HelloService.class.getName(),url);*/

        /*//创建服务，以便其他程序可以远程访问
        //HttpServer httpServer = new HttpServer();
        NettyServer server = new NettyServer();
        server.start(url.getHost(),url.getPort());*/

        // 改进版，通过工程类来启动指定协议的server
        Protocol protocol = ProtocolFactory.getProtocol();
        // 要远程调用的接口名传递到启动方法中，在启动方法中根据不同的协议进行分别注册到远程注册中心
        protocol.start(url.getHost(),url.getPort(),HelloService.class.getName());
    }
}
